package com.common.baselibrary.sharepreference;


import com.common.baselibrary.ApplicationManager;

import java.util.List;
import java.util.Map;

/**
 * 基于Preference的Provider
 */
public abstract class BasePreferenceProvider {

    /**
     * SP文件名称
     */
    public abstract String getSpFileName();

    /**
     * “旧的”SP文件名称
     */
    public String getOldSpFileName() {
        return "";
    }

    protected PrefWrapper prefWrapper;

    protected void initPreWrapper() {
        prefWrapper = PrefWrapper.instance(ApplicationManager.getApplicationContext(), getSpFileName());
    }

    /**
     * prefWrapper的包装
     *
     * @return
     */
    protected final synchronized PrefWrapper prefWrapper() {
        return prefWrapper;
    }

    public void putString(String key, String value) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().putString(key, value);
    }

    public String getString(String key, String defaultValue) {
        if (prefWrapper() == null) {
            return defaultValue;
        }
        return prefWrapper().getString(key, defaultValue);
    }

    public void putInt(String key, int value) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().putInt(key, value);
    }

    public int getInt(String key, int defaultValue) {
        if (prefWrapper() == null) {
            return defaultValue;
        }
        return prefWrapper().getInt(key, defaultValue);
    }

    public void putLong(String key, long defaultValue) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().putLong(key, defaultValue);
    }

    public long getLong(String key, long defaultValue) {
        if (prefWrapper() == null) {
            return defaultValue;
        }
        return prefWrapper().getLong(key, defaultValue);
    }

    public void putBoolean(String key, boolean defaultValue) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().putBoolean(key, defaultValue);
    }

    public boolean getBoolean(String key, boolean defaultValue) {
        if (prefWrapper() == null) {
            return defaultValue;
        }
        return prefWrapper().getBoolean(key, defaultValue);
    }

    public void remove(String key) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().removeKey(key);
    }

    public void removeList(List<String> keyList) {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().removeKeyList(keyList);
    }

    public Map<String, ?> getAll() {
        if (prefWrapper() == null) {
            return null;
        }
        return prefWrapper().getAll();
    }

    public void clear() {
        if (prefWrapper() == null) {
            return;
        }
        prefWrapper().clear();
    }

}
